package main

import (
"fmt"
"sync"

"time"
)

var wg2 sync.WaitGroup
var exit bool

// 全局变量方式存在的问题：
// 1. 使用全局变量在跨包调用时不容易统一
// 2. 如果worker中再启动goroutine，就不太好控制了。

func worker2() {
	go func() {
		for {
			fmt.Println("worker2")
			time.Sleep(time.Second)
			if exit {
				fmt.Println("worker2 exit")
				break
			}
		}
		wg2.Done()
	}()
	for {
		fmt.Println("worker")
		time.Sleep(time.Second)
		if exit {
			fmt.Println("worker exit")
			break
		}

	}
	wg2.Done()
}

func main() {
	wg2.Add(2)
	go worker2()
	time.Sleep(time.Second * 3) // sleep3秒以免程序过快退出
	exit = true                 // 修改全局变量实现子goroutine的退出
	wg2.Wait()
	fmt.Println("over")
}